/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fr.afcepf.projet2.metiers.donnees.assembleur.commandes;

import fr.afcepf.projet2.metiers.donnees.assembleur.comptes.AdresseAssembleur;
import fr.afcepf.projet2.metiers.donnees.assembleur.comptes.UtilisateurAssembleur;
import fr.afcepf.projet2.metiers.donnees.dto.commandes.CommandeDto;
import fr.afcepf.projet2.metiers.donnees.dto.commandes.LigneCommandeDto;
import fr.afcepf.projet2.metiers.donnees.entites.commandes.Commande;
import fr.afcepf.projet2.metiers.donnees.entites.commandes.LigneCommande;
import java.util.ArrayList;
import java.util.List;

/**
 * Classe permettant l'assemblage des donnes DTO <-> ENTITES Produit Produit
 *
 * @author Wahida
 */
public class CommandeAssembleur {

    /**
     * Convertit une entité Commande en DTO correspondant
     *
     * @param commande Entity de type Commande
     * @return dto de type Commande
     */
    public static CommandeDto creationCommandeDto(Commande commande) {
        CommandeDto commandeDto = new CommandeDto(); 
        if(commande.getAdresseFacturation() != null){
            commandeDto.setAdresseFacturation(
                AdresseAssembleur.creationAdresseDto(commande.getAdresseFacturation()));
        }
        if(commande.getAdresseFacturation() != null){
            commandeDto.setAdresseLivraison(
                AdresseAssembleur.creationAdresseDto(commande.getAdresseLivraison()));
        }
        commandeDto.setDateCommande(commande.getDateCommande());
        if(commande.getEtatCommande() != null){
            commandeDto.setEtatCommande(
                    EtatCommandeAssembleur.creationEtatCommandeDto(commande.getEtatCommande()));
        }
        commandeDto.setIdCommande(commande.getIdCommande());
        if(commande.getLigneCommandes() != null){
            List<LigneCommandeDto> lignesCommande = 
                LigneCommandeAssembleur.creationListeLigneCommandeDto(commande.getLigneCommandes());
        commandeDto.setLignesCommande(lignesCommande);
        }
        if(commande.getModeLivraison() != null){
            commandeDto.setModeLivraison(
                    ModeLivraisonAssembleur.creationModeLivraisonDto(commande.getModeLivraison()));
        }
        if(commande.getModePaiement() != null ){
            commandeDto.setModePaiement(
                    ModePaiementAssembleur.creationModePaiementDto(commande.getModePaiement()));
        }
        commandeDto.setNumeroCommande(commande.getNumeroCommande());
        commandeDto.setSite(commande.getSite());
        if(commande.getUtilisateur() != null){
            commandeDto.setUtilisateur(
                    UtilisateurAssembleur.creationUtilisateurDto(commande.getUtilisateur()));
        }
                
         return commandeDto;
    }

    /**
     * Convertit une liste d'entités Commande en liste de DTO correspondants
     *
     * @param listeCommande liste d'entités à convertir
     * @return liste de DTOs convertis
     */
    public static List<CommandeDto> creationListeCommandeDto(List<Commande> listeCommande) {
        List<CommandeDto> listeCommandeDto = new ArrayList<>();
         for(Commande commande : listeCommande){
            CommandeDto commandeDto = creationCommandeDto(commande);
            listeCommandeDto.add(commandeDto);
        }
        return listeCommandeDto;
    }

     /**
     * Convertis un DTO Commande en entité correspondante
     *
     * @param commandeDto Entité à convertir
     * @return Entité correspondant
     */
    public static Commande updateCommande(CommandeDto commandeDto) {
        Commande commande = new Commande();
        if(commandeDto.getAdresseFacturation() != null){
            commande.setAdresseFacturation(
                AdresseAssembleur.updateAdresse(commandeDto.getAdresseFacturation()));
        }
        if(commandeDto.getAdresseFacturation() != null){
            commande.setAdresseLivraison(
                AdresseAssembleur.updateAdresse(commandeDto.getAdresseLivraison()));
        }
        commande.setDateCommande(commandeDto.getDateCommande());
        if(commandeDto.getEtatCommande() != null){
            commande.setEtatCommande(
                    EtatCommandeAssembleur.updateEtatCommande(commandeDto.getEtatCommande()));
        }
        commande.setIdCommande(commandeDto.getIdCommande());
        if(commandeDto.getLigneCommandes() != null){
            List<LigneCommande> lignesCommandeDto = 
                LigneCommandeAssembleur.updateListeLigneCommande(commandeDto.getLigneCommandes());
        commande.setLignesCommande(lignesCommandeDto);
        }
        if(commandeDto.getModeLivraison() != null){
            commande.setModeLivraison(
                    ModeLivraisonAssembleur.updateModeLivraison(commandeDto.getModeLivraison()));
        }
        if(commandeDto.getModePaiement() != null ){
            commande.setModePaiement(
                    ModePaiementAssembleur.updateModePaiement(commandeDto.getModePaiement()));
        }
        commande.setNumeroCommande(commandeDto.getNumeroCommande());
        commande.setSite(commandeDto.getSite());
        if(commandeDto.getUtilisateur() != null){
            commande.setUtilisateur(
                    UtilisateurAssembleur.updateUtilisateur(commandeDto.getUtilisateur()));
        }
 
        return commande;
    }

    /**
     * Convertit une liste de DTO Commande en entités correspondantes
     *
     * @param listeCommandeDto liste de DTOs à convertir
     * @return liste d'entités commande converties
     */
    public static List<Commande> updateListeCommande(List<CommandeDto> listeCommandeDto) {
        List<Commande> listeCommande = new ArrayList<>();
         for(CommandeDto commandeDto : listeCommandeDto){
           Commande commande = CommandeAssembleur.updateCommande(commandeDto);
           listeCommande.add(commande);
        }
        return listeCommande;
        
    }
}
